package com.loong.tool.lang;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期处理工具
 * 
 * @author 张成轩
 */
public class Dates {

	/** 时间格式 */
	public static final String FORMAT_TIME = "yyyy-MM-dd HH:mm:ss";
	/** 日期格式 */
	public static final String FORMAT_DATE = "yyyy-MM-dd";

	/** 时间格式化工具 */
	public static DateFormat timeDf = new SimpleDateFormat(FORMAT_TIME);
	/** 日期格式化工具 */
	public static DateFormat dateDf = new SimpleDateFormat(FORMAT_DATE);

	/**
	 * 格式化时间，格式为 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param time 日期对象
	 * @return 时间字符串
	 */
	public static String formatTime(Date time) {

		return timeDf.format(time);
	}

	/**
	 * 格式化日期，格式为 yyyy-MM-dd
	 * 
	 * @param date 日期对象
	 * @return 日期字符串
	 */
	public static String formatDate(Date date) {

		return dateDf.format(date);
	}

	/**
	 * 格式化时间
	 * 
	 * @param date 时间对象
	 * @param format 格式化
	 * @return 时间字符串
	 */
	public static String format(Date date, String format) {

		DateFormat df = new SimpleDateFormat(format);
		return df.format(date);
	}

	/**
	 * 转换为日期
	 * 
	 * @param time 时间字符串，格式为 yyyy-MM-dd HH:mm:ss
	 * @return 时间对象
	 */
	public static Date toTime(String time) {

		try {
			return timeDf.parse(time);
		} catch (ParseException e) {
			return null;
		}
	}

	/**
	 * 转换为日期
	 * 
	 * @param date 日期字符串，格式为 yyyy-MM-dd
	 * @return 时间对象
	 */
	public static Date toDate(String date) {

		try {
			return dateDf.parse(date);
		} catch (ParseException e) {
			return null;
		}
	}

	/**
	 * 转换为时间
	 * 
	 * @param date 时间字符串
	 * @param format 格式化
	 * @return 时间对象
	 */
	public static Date to(String date, String format) {

		DateFormat df = new SimpleDateFormat(format);
		try {
			return df.parse(date);
		} catch (ParseException e) {
			return null;
		}
	}

	/**
	 * 获取当前日期
	 * 
	 * @return 当前日期
	 */
	public static String getCurrentDate() {

		return dateDf.format(new Date());
	}

	/**
	 * 获取当前时间
	 * 
	 * @return 当前日期
	 */
	public static String getCurrentTime() {

		return timeDf.format(new Date());
	}

	/**
	 * 获取当前日期日历对象
	 * 
	 * @return 当前日期
	 */
	public static Calendar getCurrentCDate() {

		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.MILLISECOND, 0);
		return c;
	}
}
